.Net Core配置到Nginx
1、安装.net core环境
打开网站:.NET Downloads (Linux, macOS, and Windows) (microsoft.com)
选择要下载的版本,点击进去
Download .NET Core 3.1 (Linux, macOS, and Windows) (microsoft.com)
进入这个网站以后,选择SDK,然后找到对应的服务器的系统版本,注意一下32位和64位的区别
选择x64会打开一个新的网页:Download .NET Core 3.1 SDK (v3.1.409) - Linux x64 Binaries (microsoft.com)
这个里边有安装命令
# 进入/usr/local文件夹
$ cd /usr/local
# 新建一个dotnet3.1的安装目录
$ mkdir dotnet-3.1
# 进去 刚才创建的安装目录文件夹
$ cd dotnet-3.1
# 在当前安装目录下载dotnet core3.1 的sdk的压缩文件
$ wget https://download.visualstudio.microsoft.com/download/pr/dfbc47b7-4c2c-4e00-989e-a18f6f2e8fe8/5f42a60705fd9122837c68dcbdbbe278/dotnet-sdk-3.1.409-linux-x64.tar.gz
# 解压文件
$ tar zxf dotnet-sdk-3.1.409-linux-x64.tar.gz
# 进入主目录
$ cd /
# 打印一下dotnet的信息,如果提示找不到命令,那就说明前边的步骤有问题了
$ /usr/local/dotnet-3.1/dotnet --info
2、上传发布过后的文件夹
注意:在VS发布的时候,因为服务器是Linux,所以发布的平台为Linux
发布完成以后,使用scp
命令上传文件
# -P 后边跟的是服务器的端口号
# UserServiceAPI 是你发布后的文件夹
# @ 前边的huahansoft-linux是用户名
# @ 后边的192.168.0.201是服务器的IP
# :后边的 /home/qrcbank-date 是要存储到服务器上的文件夹(注意:这个地方不需要加UserServiceAPI)
$ scp -P 22 -r UserServiceAPI huahansoft-linux@192.168.0.201:/home/huahansoft-linux
3、移动位置并赋予权限
上边我们将发布后的文件传到服务器上以后,位置是在/home/huahansoft-linux/UserServiceAPI
,但是实际上我们的项目是不会放在这个地方的。一般都是放在/home/www
文件夹下,所以需要移动文件夹
# 移动之前先删除原来的文件夹
$ rm -fr /home/www/UserServiceAPI
# 移动文件夹
$ mv /home/huahansoft-linux/UserServiceAPI /home/www
程序配置到服务器上,一般不使用root
或者远程用户huahansoft-linux
来启动,所以我们可以单独建一个用户用来启动网站,这个一般都跟项目名称保持一致了,举个例子:项目名叫 abc,那么我就新建一个用户叫abc【要提前订好这个名字,不要不同的人建重复了】
# 新建用户组
$ groupadd abc
# 新建一个输入abc用户组的abc用户,兵器指定abc用户不能用户shell登录
$ useradd -g abc abc -s /usr/sbin/nologin
建完这个用户以后,因为项目是用这个用户启动的,所以要指定项目的所有者为abc
用户
# 将/home/huahansoft-linux/UserServiceAPI的所有者设置成 abc:abc 【一个用户组,一个用户】
$ chown -R abc:abc /home/huahansoft-linux/UserServiceAPI
4、创建服务
上边弄完以后,我们可以使用/usr/local/dotnet-3.1/dotnet /home/huahansoft-linux/UserServiceAPI/UserserviceAPI.dll
来启动网站,但是这个有个问题,是在前端启动的,一旦我们推出远程桌面,程序就停止了,所以要建立一个服务,让他自己开机启动
# 新建一个服务文件,存在修改,不存在创建
# abc-userserviceapi:前边是项目名,后边是当前模块名【可以按照后台、接口区分】
$ vim /etc/systemd/system/abc-userserviceapi.service
# 然后将下边的内容拷贝进去
[Unit]
Description=qrc transcationapi Web API App running on Ubuntu
[Service]
WorkingDirectory=/home/www/TranscationServiceAPI
ExecStart=/usr/local/dotnet-3.1/dotnet /home/huahansoft-linux/UserServiceAPI/UserserviceAPI.dll --urls=http://*:20014
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=qrc-transcationapi
User=abc
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
# 这个里边有几个地方需要改
# 1. Description:项目描述,这个修改成你自己的描述即可
# 2. WorkingDirectory:项目工作目录,这个是项目的目录
# 3. ExecStart:启动命令,类似于在命令行中执行的启动网站的命令,--urls指定了项目的端口
# 5. SyslogIdentifier:项目标识,这个一定是每个项目不一样的
# 6. User:启动项目的用户,不带用户组
# 其他的都不用动
服务创建完成以后,可以启动服务看一下
# 启动服务 abc-userserviceapi:服务名称,这个就是上边创建的服务的文件名
$ systemctl start abc-userserviceapi
# 启动以后,看一下状态是否正常
$ systemctl status abc-userserviceapi
# 如果将来重新上传程序,不需要停止服务需要执行重启
$ systemctl restart abc-userserviceapi
# 也可以停止服务
$ systemctl stop abc-userserviceapi
这个地方需要注意一个问题,如果我修改了abc-userserviceapi.service
这个文件,那么需要执行另外一个命令才能使用上边的命令
$ systemctl daemon-reload
5、设置nginx代理
上边已经在服务器上把UserServiceAPI跑起来了,但是只能通过http://localhost:20014
进行访问,下边就是使用nginx做代理,可以让项目在公网访问
打开/usr/local/nginx-1.18.0/conf/webhosts
目录,新建一个abc-userservice.conf
文件【每个项目一个,不要混用】
$ cd /usr/local/nginx-1.18.0/conf/webhosts
$ vim abc-userservice.conf
# 将下列内容拷贝进去
server {
listen 20052;
server_name 192.168.0.201;
location / {
proxy_pass http://localhost:20014;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 1. listen:nginx要监听的本地端口,这个地方如果将来是客户的机器,那么使用80就可以,如果是内网,那么需要指定一个本地的端口【项目端口20014是不能用的】
# 2. server_name:域名,因为是在内网,所以使用的是IP,外网可以使用域名。e.g. www.abc.com
# 3. proxy_pass:代理的项目的地址
保存文件,然后重启nginx服务
$ systemctl restart nginx-1.18.0.service
重启完成以后,在自己的电脑上使用http://192.168.0.201:20052
进行访问。
6、配置图片网站
上边是配置的.net core的应用程序,我们在项目中还使用了一种minio上传图片的技术,图片是上传到minio中了,但是对外访问还需要从nginx代理走
server {
listen 9002;
server_name 192.168.0.201;
charset utf-8;
location / {
root /home/minio/data;
index index.html;
image on;
image_output on;
image_jpeg_quality 100;
}
}
这个里边,location中指定了图片路径,注意:这个是到配置项目的那个文件夹,不是根目录
下边的image
、image_output
、image_jpeg_quality
就是我们之前配置的nginx插件的中的东西
具体的看下边
image on/off 是否开启缩略图功能,默认关闭
image_backend on/off 是否开启镜像服务,当开启该功能时,请求目录不存在的图片(判断原图),将自动从镜像服务器地址下载原图
image_backend_server 镜像服务器地址
image_output on/off 是否不生成图片而直接处理后输出 默认off
image_jpeg_quality 75 生成JPEG图片的质量 默认值75
image_water on/off 是否开启水印功能
image_water_type 0/1 水印类型 0:图片水印 1:文字水印
image_water_min 300 300 图片宽度 300 高度 300 的情况才添加水印
image_water_pos 0-9 水印位置 默认值9 0为随机位置,1为顶端居左,2为顶端居中,3为顶端居右,4为中部居左,5为中部居中,6为中部居右,7为底端居左,8为底端居中,9为底端居右
image_water_file 水印文件(jpg/png/gif),绝对路径或者相对路径的水印图片
image_water_transparent 水印透明度,默认20
image_water_text 水印文字 "Power By Vampire"
image_water_font_size 水印大小 默认 5
image_water_font 文字水印字体文件路径
image_water_color 水印文字颜色,默认 #000000
我们访问某一个图片的时候,用下边的方式访问即可
原图:http://192.168.1.200:9002/demo/user/1.jpg
压缩后的:http://192.168.1.200:9002/demo/user/1.jpg!c300x300.jpg
#有关参数:
c参数按请求宽高比例从图片高度10%处开始截取图片,然后缩放到指定尺寸
m参数按请求宽高比例从图片中截取图片,然后缩放到指定尺寸
t参数按请求宽高比例缩放到指定尺寸
w参数按请求宽高比例缩放到指定尺寸,空白处填充白背景颜色